<?php
require_once 'application/models/User/Abstract.php';

class User_Guest extends User_Abstract
{
    public function __construct($user_id)
    {
        parent::__construct($user_id);
        self::$_dbh = Framework_Registry::get('dbh');
        // Если гость ничего не делал 5 минут то выкидываем его на авторизацию
        $count = self::$_dbh->selectCell('SELECT COUNT(*)
                                          FROM user
                                          WHERE user_id=? AND UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(user_last_visit) > 300',
                                          $this->_userId);
        if ($count) {
            throw new Framework_Exception('timeout');
        }
    }
    
    /**
     * Обновляет время последнего визита
     *
     */
    public function __destruct()
    {
        self::$_dbh->query("UPDATE user SET user_last_visit=NOW() WHERE user_id=?", $this->_userId);
    }

    /**
	 * получаем список всех гостей
	 * @return array $rows
	 * @author kiote 
	 */
	public static function getAllGuests($order = '', $desc = 0, $page = 0, $sum = 0, &$paging = array())
	{
		$row = 'user_id';
		$desc = ($desc) ? 'DESC' : '';
		if (''!==$order) 
		{
			if (in_array($order,array('active','block','last_visit',
										'login','updated','created')))
			{
				$row = 'user_'.$order;
			}
		}
		$sql ="SELECT *, count(abuse_id) as abuse_count FROM user
				LEFT JOIN abuse ON (abuse_user_id_to = user_id)
				WHERE user_password IS NULL 
				GROUP BY user_id
				ORDER BY $row $desc
				{ LIMIT ?d,?d } ";
		$rows = Framework_Registry::get('dbh')->selectPage($total_rows,$sql,   
						$sum*$page,
						(!$sum) ? DBSIMPLE_SKIP : $sum);
		$paging = paging($page, $sum, $total_rows);
		return $rows;
		
	}
   
    /**
     * Создает гостя
     * modified by kiote
     * @param string $login
     * @return int
     */
    public function create($login)
    {
        //Проверяем логин
        if (empty($login)) return null;
        $data = Framework_Registry::get('dbh')->selectRow('SELECT *, UNIX_TIMESTAMP(user_last_visit) AS user_last_visit FROM `user`
                                                           WHERE user_login=?
                                                           ORDER BY user_id DESC
                                                           LIMIT 1',
                                                           $login);
        // Существует зарегистрированный пользователь с таким логином
		if ($data){ // а вообще что-то есть?
	        if ($data['user_password']) return null;
	        // Есть активный гость с таким логином
	        if (!$data['user_password'] && $data['user_active'] == 1 && time() - $data['user_last_visit'] < 300) return null;
        }
		// Пытаемся создать гостя
        $user_id = @Framework_Registry::get('dbh')
            ->query("INSERT INTO user
                     SET user_login=?,
                         user_last_visit=NOW(),
                         user_created=NOW(), 
                         user_active='1'",
                     $login);
        
        return empty($user_id) ? null : new self($user_id);
    }
    
    /**
     * Проверяет логин на занятость
     *
     * @param string $login
     * @return int
     */
    public function _checkLogin($login)
    {
        return empty($login) ? null : !self::$_dbh
            ->selectCell('SELECT user_id FROM `user`
                          WHERE user_login=? AND
                              (user_password IS NOT NULL OR
                              (user_password IS NULL AND UNIX_TIMESTAMP(NOW())
                              - UNIX_TIMESTAMP(user_last_visit) < 300 AND
                              user_active=1) OR
                              user_password IS NULL AND user_active=0)',
                              $login);
    }
}